﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Presentation;

using BusinessLogic;

namespace Presentation
{
	public class ControllerViewMain : IControllerViewMain
	{
		// ATTRIBUT
		private IViewMain _oViewMain;		

		private IControllerBusinessPersonne _oControllerPersonne;
		public IControllerBusinessPersonne ControllerPersonne
		{
			get { return _oControllerPersonne; }
			set { _oControllerPersonne = value; }
		}

		private IPersonneEntity _oPersonneEnCours;
		public IPersonneEntity PersonneSaisie
		{
			get { return _oPersonneEnCours; }
			//set { _oPersonneEnCours = value; }
		}	
	
		private Dictionary<string, IPersonneEntity> DicoPersonne
		{
			get { return _oControllerPersonne.DicoPersonne; }
		}

		// CONTRUCTEUR
		public ControllerViewMain( IViewMain oViewMain, IPersonneEntity oPersonneEnCours, IControllerBusinessPersonne oControllerPersonne)
		{		
			this._oViewMain				= oViewMain;			
			this._oPersonneEnCours		= oPersonneEnCours;
			this._oControllerPersonne	= oControllerPersonne;
		}

		// METHODE
		public void Start()
		{
			LoadView();
			_oViewMain.Initialize();
		}

		public void LoadView()
		{
			_oViewMain.EtatBtAjouter	= true;
			_oViewMain.EtatBtModifier	= false;
			_oViewMain.EtatBtSupprimer	= false;			

			_oViewMain.ClearGrid();

			foreach( IPersonneEntity oPersonne in DicoPersonne.Values )
			{
				_oViewMain.AddRowToGrid( oPersonne );
			}

			CalculResult();
		}		

		public void CalculResult()
		{
			_oViewMain.ResultMoyenneAge		= _oControllerPersonne.CalculMoyenneAge();
			_oViewMain.ResultNombreInscrit	= _oControllerPersonne.CalculNombreInscrit();
		}

		private void UpdateFieldPersonne()
		{
			_oViewMain.NomPersonne		= _oPersonneEnCours.Nom;
			_oViewMain.PrenomPersonne	= _oPersonneEnCours.Prenom;
			_oViewMain.AgePersonne		= _oPersonneEnCours.Age;
			_oViewMain.AdressePersonne	= _oPersonneEnCours.Adresse;			
		}

		private void ReadFieldPersonne()
		{
			_oPersonneEnCours.Nom		= _oViewMain.NomPersonne;
			_oPersonneEnCours.Prenom	= _oViewMain.PrenomPersonne;
			_oPersonneEnCours.Age		= _oViewMain.AgePersonne;
			_oPersonneEnCours.Adresse	= _oViewMain.AdressePersonne;
		}

		private void ClearFieldPersonne()
		{
			_oViewMain.NomPersonne		= "";
			_oViewMain.PrenomPersonne	= "";
			_oViewMain.AgePersonne		= 0;
			_oViewMain.AdressePersonne	= "";			
		}

		// EVENT

		public void AddPersonne()
		{
			ReadFieldPersonne();
			_oPersonneEnCours = _oControllerPersonne.CreateEntity( _oPersonneEnCours );
			_oViewMain.AddRowToGrid( _oPersonneEnCours );
			_oViewMain.SetRowSelected(_oPersonneEnCours.Code );
			UpdateFieldPersonne();

			_oViewMain.EtatBtAjouter	= false;
			_oViewMain.EtatBtModifier	= true;
			_oViewMain.EtatBtSupprimer	= false;

			CalculResult();
		}

		public void UpdatePersonne()
        {
			ReadFieldPersonne();
			_oControllerPersonne.UpdateEntity( _oPersonneEnCours );
			_oViewMain.UpdateRowInGrid( _oPersonneEnCours );
			_oViewMain.SetRowSelected(_oPersonneEnCours.Code );
			UpdateFieldPersonne();

			_oViewMain.EtatBtAjouter	= false;
			_oViewMain.EtatBtModifier	= true;
			_oViewMain.EtatBtSupprimer	= false;			

			CalculResult();
		}

		public void DeletePersonne()
        {
			_oControllerPersonne.DeleteEntity( _oPersonneEnCours );
			_oViewMain.RemoveRowInGrid( _oPersonneEnCours );
			_oViewMain.SetRowSelected( null );
			ClearFieldPersonne();			

			CalculResult();
		}

		public void Cancel()
		{
			ClearFieldPersonne();

			_oViewMain.SetRowSelected( null );

			CalculResult();
		}

		public void SelectedRowChanged(string strCode)
        {
			if( !String.IsNullOrEmpty( strCode ) )
			{
				_oPersonneEnCours = DicoPersonne[strCode];

				UpdateFieldPersonne();
				_oViewMain.EtatBtAjouter	= false;
				_oViewMain.EtatBtModifier	= true;
				_oViewMain.EtatBtSupprimer	= true;
			}
			else
			{
				ClearFieldPersonne();
				_oViewMain.EtatBtAjouter	= true;
				_oViewMain.EtatBtModifier	= false;
				_oViewMain.EtatBtSupprimer	= false;
			}
		}	
	}
}
